#include "mytreewidget.h"
#include <QApplication>
#include <QTreeWidget>
#include <QHeaderView>
#if 0
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //方式一：树形控件，作为 widget 窗口上的一个子控件
//    myTreeWidget w;
//    w.setWindowTitle("myTreeWidget控件");
//    w.resize(600, 300);
//    QTreeWidget treeWidget(&w);
    //方式二：独立的树形窗口,不指定父窗口
    QTreeWidget treeWidget;

    //设置列数
    treeWidget.setColumnCount(3);
    treeWidget.resize(600,250);

    //隐藏表头
    treeWidget.setHeaderHidden(true);
    //设置展开
    treeWidget.expandAll();

    //添加顶层结点->
    //添加顶层结点-方式1、调用相应的构造函数，直接将结点作为树形控件的顶层结点
    QTreeWidgetItem topItem(&treeWidget);
    topItem.setText(0, "教程");
    //添加顶层结点-方式2、调用 QTreeWidget 类的 addTopLevelItem() 方法
//    QTreeWidgetItem topItem, topItem2;
//    topItem.setText(0, "教程");
//    treeWidget.addTopLevelItem(&topItem);


    //除此之外，还有其它添加结点的方法，例如使用QList<QTreeWidgetItem *> items一次性向树形控件中添加多个顶层结点或者子结点：

    //添加子结点
    //方式1、调用相应的构造函数，直接指定新结点的父结点QTreeWidgetItem childItem(&item);
    //方式2、先创建一个新结点，调用 QTreeWidgetItem 类提供的 addChild() 方法，可以为某个结点添加子结点。QTreeWidgetItem childItem2;item2.addChild(&childItem2);
    QStringList c;
    c << QString("C语言教程") << QString("http://c.biancheng.net/c/")<< QString("finish");
    QTreeWidgetItem childItem1(&topItem, c);

//    QStringList qt;
//    qt << QString("Qt教程") << "http://c.biancheng.net/qt/" << QString("no finish");
//    QTreeWidgetItem childItem2(&topItem, qt);
    QTreeWidgetItem childItem2;
    topItem.addChild(&childItem2);
    childItem2.setText(0, QString("Qt教程"));
    childItem2.setText(1, QString("http://c.biancheng.net/qt/"));
    childItem2.setText(2, QString("no finish"));

    QStringList python;
    python << QString("Python教程") << "http://c.biancheng.net/python/"<<QString("finish");
    QTreeWidgetItem childItem3(&topItem,python);


//    QTreeWidgetItem sonItem1(&topItem2, QString("研发部"));
//    QTreeWidgetItem sonItem2(&topItem2, QString("市场部"));
//    QTreeWidgetItem sonItem3(&topItem2, QString("人力资源部"));


    //w.show(); 方式一
    treeWidget.show(); //方式二
    return a.exec();
}

#endif
#if 0
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //方式一：树形控件，作为 widget 窗口上的一个子控件
    myTreeWidget w;
    w.setWindowTitle("myTreeWidget控件");
    w.resize(600, 300);
    QTreeWidget treeWidget(&w);
//    //方式二：独立的树形窗口,不指定父窗口
//    QTreeWidget treeWidget;

    //设置列数
    treeWidget.setColumnCount(3);
    treeWidget.resize(600,250);

    //隐藏表头
    treeWidget.setHeaderHidden(true);

    //设置展开
    treeWidget.expandAll();

    //添加顶层结点->
    //添加顶层结点-方式1、调用相应的构造函数，直接将结点作为树形控件的顶层结点
    QTreeWidgetItem topItem(&treeWidget);
    topItem.setText(0, "教程");
    //添加顶层结点-方式2、调用 QTreeWidget 类的 addTopLevelItem() 方法
//    QTreeWidgetItem topItem;
//    topItem.setText(0, "教程");
//    treeWidget.addTopLevelItem(&topItem);


    //除此之外，还有其它添加结点的方法，例如使用QList<QTreeWidgetItem *> items一次性向树形控件中添加多个顶层结点或者子结点：

    //添加子结点
    //方式1、调用相应的构造函数，直接指定新结点的父结点QTreeWidgetItem childItem(&item);
    //方式2、先创建一个新结点，调用 QTreeWidgetItem 类提供的 addChild() 方法，可以为某个结点添加子结点。QTreeWidgetItem childItem2;item2.addChild(&childItem2);
    QStringList c;
    c << QString("C语言教程") << QString("http://c.biancheng.net/c/")<< QString("finish");
    QTreeWidgetItem childItem1(&topItem, c);

//    QStringList qt;
//    qt << QString("Qt教程") << "http://c.biancheng.net/qt/" << QString("no finish");
//    QTreeWidgetItem childItem2(&topItem, qt);
    QTreeWidgetItem childItem2;
    topItem.addChild(&childItem2);
    childItem2.setText(0, QString("Qt教程"));
    childItem2.setText(1, QString("http://c.biancheng.net/qt/"));
    childItem2.setText(2, QString("no finish"));

    QStringList python;
    python << QString("Python教程") << "http://c.biancheng.net/python/"<<QString("finish");
    QTreeWidgetItem childItem3(&topItem,python);

    //插入第二个顶点结点,并子项带复选框
    //添加顶层结点-方式1、调用相应的构造函数，直接将结点作为树形控件的顶层结点
//    QTreeWidgetItem topItem2(&treeWidget);
//    topItem2.setText(0,"腾讯");
//    topItem2.setCheckState(0,Qt::Checked);
    //添加顶层结点-方式2、调用 QTreeWidget 类的 addTopLevelItem() 方法
    QTreeWidgetItem topItem2;
    treeWidget.addTopLevelItem(&topItem2);
    topItem2.setText(0,"腾讯");
    topItem2.setCheckState(0,Qt::Checked);

//    QTreeWidgetItem *item21 = new QTreeWidgetItem(topItem2);
//    item21->setText(0,"RD");
//    item21->setCheckState(0,Qt::Checked);
    QTreeWidgetItem item21;
    topItem2.addChild(&item21);
    item21.setText(0, QString("RD"));
    item21.setCheckState(0, Qt::Checked);

//    QTreeWidgetItem *item22 = new QTreeWidgetItem(topItem2);
//    item22->setText(0,"Sale");
//    item22->setCheckState(0,Qt::Checked);
    QTreeWidgetItem item22;
    topItem2.addChild(&item22);
    item22.setText(0, QString("sale"));
    item22.setCheckState(0, Qt::Checked);
//    QTreeWidgetItem *item23 = new QTreeWidgetItem(topItem2);
//    item23->setText(0,QString("HR"));
//    item23->setCheckState(0,Qt::Checked);
    QTreeWidgetItem item23;
    topItem2.addChild(&item23);
    item23.setText(0, QString("RD"));
    item23.setCheckState(0, Qt::Checked);


    //插入第3个顶点结点, 带图标
    QTreeWidgetItem topItem3(&treeWidget);
    topItem3.setText(0,"百度");
    topItem3.setIcon(0, QIcon("D:\\studydir\\myQTreeWidget\\Res\\Icon\\toolcon.jpg"));

    QTreeWidgetItem item31;
    topItem3.addChild(&item31);
    item31.setText(0, QString("RD"));
    item31.setIcon(0, QIcon("D:\\studydir\\myQTreeWidget\\Res\\Icon\\Icon2.jpeg"));

    QTreeWidgetItem item311;
    item31.addChild(&item311);
    item311.setText(0, QString("jack lee"));
    item311.setIcon(0, QIcon("D:\\studydir\\myQTreeWidget\\Res\\Icon\\assitant.webp"));
    w.show(); //方式一
    //treeWidget.show(); //方式二
    return a.exec();
}

#endif
#if 1
//const QString styles = "QTreeView\
//{\
//    background-color: #5B677A;\
//    font-size:17px;\
//    color: white;\
//}\
//QTreeView::item:hover\
//{\
//    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);\
//    border: 1px solid #bfcde4;\
//}\
//QTreeView::item:hover\
//{\
//    background: rgb(69, 187, 217);\
//}\
//QTreeView::item:selected:active\
//{\
//    background: rgb(63, 147, 168);\
//}\
//QTreeView::item:selected:!active\
//{\
//    background: rgb(63, 147, 168);\
//}\
//QTreeView::branch\
//{\
//    background:#5B677A;\
//}\
//QTreeView::branch:has-children:!has-siblings:closed,QTreeView::branch:closed:has-children:has-siblings\
//{\
//    border-image: none;\
//    background:#5B677A;\
//    image: url(image/Folder-1.png);\
//}\
//QTreeView::branch:open:has-children:!has-siblings,QTreeView::branch:open:has-children:has-siblings\
//{\
//    border-image: none;\
//    background:#5B677A;\
//    image: url(image/Open-Folder.png);\
//}";
#if 0
const QString styles = "\
QHeaderView::section\
{\
    background-color: white;\
}";
#endif
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //方式一：树形控件，作为 widget 窗口上的一个子控件
    myTreeWidget w;
    w.setWindowTitle("myTreeWidget");
    w.resize(600, 300);

        #if 0
    QTreeWidget treeWidget(&w);
//    //方式二：独立的树形窗口,不指定父窗口
//    QTreeWidget treeWidget;

    //连接信号
    QObject::connect(&treeWidget, &QTreeWidget::itemPressed, &w, &myTreeWidget::OnDoItemPressed);



    //设置列数
    treeWidget.setColumnCount(3);
    treeWidget.resize(600,250);

    //隐藏表头
//    treeWidget.setHeaderHidden(true);
//    默认情况下，每一列的表头是当前列的列号。必要的时候，我们还可以指定每一列的表头。例如：
    QStringList top;
    top << QString("Tips") << QString("Url") << QString("status");
//    top << "教程" << "网址” <<"完成状态";
//    top << QString("教程") << QString("网址") << QString("完成状态");
    treeWidget.setHeaderLabels(top);

    //设置qss
    treeWidget.header()->setStyleSheet(styles);

    //设置展开
    treeWidget.expandAll();

    //添加顶层结点->
    //添加顶层结点-方式1、调用相应的构造函数，直接将结点作为树形控件的顶层结点
    QTreeWidgetItem topItem(&treeWidget);
    topItem.setText(0, "教程");
    //添加顶层结点-方式2、调用 QTreeWidget 类的 addTopLevelItem() 方法
//    QTreeWidgetItem topItem;
//    topItem.setText(0, "教程");
//    treeWidget.addTopLevelItem(&topItem);


    //除此之外，还有其它添加结点的方法，例如使用QList<QTreeWidgetItem *> items一次性向树形控件中添加多个顶层结点或者子结点：

    //添加子结点
    //方式1、调用相应的构造函数，直接指定新结点的父结点QTreeWidgetItem childItem(&item);
    //方式2、先创建一个新结点，调用 QTreeWidgetItem 类提供的 addChild() 方法，可以为某个结点添加子结点。QTreeWidgetItem childItem2;item2.addChild(&childItem2);
    QStringList c;
    c << QString("C语言教程") << QString("http://c.biancheng.net/c/")<< QString("finish");
    QTreeWidgetItem childItem1(&topItem, c);

//    QStringList qt;
//    qt << QString("Qt教程") << "http://c.biancheng.net/qt/" << QString("no finish");
//    QTreeWidgetItem childItem2(&topItem, qt);
    QTreeWidgetItem childItem2;
    topItem.addChild(&childItem2);
    childItem2.setText(0, QString("Qt教程"));
    childItem2.setText(1, QString("http://c.biancheng.net/qt/"));
    childItem2.setText(2, QString("no finish"));

    QStringList python;
    python << QString("Python教程") << "http://c.biancheng.net/python/"<<QString("finish");
    QTreeWidgetItem childItem3(&topItem,python);

    //插入第二个顶点结点,并子项带复选框
    //添加顶层结点-方式1、调用相应的构造函数，直接将结点作为树形控件的顶层结点
//    QTreeWidgetItem topItem2(&treeWidget);
//    topItem2.setText(0,"腾讯");
//    topItem2.setCheckState(0,Qt::Checked);
    //添加顶层结点-方式2、调用 QTreeWidget 类的 addTopLevelItem() 方法
    QTreeWidgetItem topItem2;
    treeWidget.addTopLevelItem(&topItem2);
    topItem2.setText(0,"腾讯");
    topItem2.setCheckState(0,Qt::Checked);

//    QTreeWidgetItem *item21 = new QTreeWidgetItem(topItem2);
//    item21->setText(0,"RD");
//    item21->setCheckState(0,Qt::Checked);
    QTreeWidgetItem item21;
    topItem2.addChild(&item21);
    item21.setText(0, QString("RD"));
    item21.setCheckState(0, Qt::Checked);

//    QTreeWidgetItem *item22 = new QTreeWidgetItem(topItem2);
//    item22->setText(0,"Sale");
//    item22->setCheckState(0,Qt::Checked);
    QTreeWidgetItem item22;
    topItem2.addChild(&item22);
    item22.setText(0, QString("sale"));
    item22.setCheckState(0, Qt::Checked);
//    QTreeWidgetItem *item23 = new QTreeWidgetItem(topItem2);
//    item23->setText(0,QString("HR"));
//    item23->setCheckState(0,Qt::Checked);
    QTreeWidgetItem item23;
    topItem2.addChild(&item23);
    item23.setText(0, QString("RD"));
    item23.setCheckState(0, Qt::Checked);


    //插入第3个顶点结点, 带图标
    QTreeWidgetItem topItem3(&treeWidget);
    topItem3.setText(0,"百度");
    topItem3.setIcon(0, QIcon("D:\\studydir\\myQTreeWidget\\Res\\Icon\\toolcon.jpg"));

    QTreeWidgetItem item31;
    topItem3.addChild(&item31);
    item31.setText(0, QString("RD"));
    item31.setIcon(0, QIcon("D:\\studydir\\myQTreeWidget\\Res\\Icon\\Icon2.jpeg"));

    QTreeWidgetItem item311;
    item31.addChild(&item311);
    item311.setText(0, QString("jack lee"));
    item311.setIcon(0, QIcon("D:\\studydir\\myQTreeWidget\\Res\\Icon\\assitant.webp"));

//    QAbstractScrollArea::connect(treeWidget,&QTreeWidget::itemClicked,
//            [=](){
//        //简单响应一下选中状态槽函数
//        for (int i=0; i<item->childCount(); i++)
//        {
//           QTreeWidgetItem *pChildItem = item->child(i);
//           pChildItem->setCheckState(0,item->checkState(0));
//        }
//    });
//        connect(ui->treeWidget,&QTreeWidget::itemClicked,this,
//                &Form::slotClicked);

//        void Form::slotClicked(QTreeWidgetItem *item, int column)
//        {
//            //简单响应一下选中状态槽函数
//            for (int i=0; i<item->childCount(); i++)
//            {
//               QTreeWidgetItem *pChildItem = item->child(i);
//               pChildItem->setCheckState(0,item->checkState(0));
//            }
//        }
#endif
    w.show(); //方式一
    //treeWidget.show(); //方式二
    return a.exec();
}

#endif
